/**
  ******************************************************************************
  * @file     SD93F115B_tim.c
  * @author   TEST TEAM 													    	
  * @version  v0															    	
  * @date     Septemper 2022												    	
  * @brief   
  *           
  * Copyright (C) 2022  Hangzhou SDIC Microelectronics Co., Ltd
  ******************************************************************************/

/* Includes*/
    
#include "SD93F115B_tim.h"
#include "SD93F115B_rcc.h"


/*------------------------------------
 * 函数功能：TIMER重设为上电默认值
 * 入口参数：TMx: TM0,TM1,TM2
 * 出口参数：None
 * 返回值  ：None
 * 编写日期：
 * 作者    ：
 *------------------------------------*/
void TM_DeInit(TM_TypeDef* TMx)
{
	/* Check the parameters */
	assert_param(IS_TM_ALL_PERIPH(TMx)); 
	
    if(TMx==TM0)
	{
		RCC_APBPeriphResetCmd(RCC_APBPeriph_TM0, ENABLE);
		RCC_APBPeriphResetCmd(RCC_APBPeriph_TM0, DISABLE); 
	}
	else 
	  if(TMx==TM1)
	 {
		RCC_APBPeriphResetCmd(RCC_APBPeriph_TM1, ENABLE);
        RCC_APBPeriphResetCmd(RCC_APBPeriph_TM1, DISABLE); 
	 }
	 else
		if(TMx==TM2)
		{
			RCC_APBPeriphResetCmd(RCC_APBPeriph_TM2, ENABLE);
			RCC_APBPeriphResetCmd(RCC_APBPeriph_TM2, DISABLE); 
		}
}

/*------------------------------------------------------
 * 函数功能：定时器使能
 * 入口参数：TMx: TM0,TM1,TM2
 *			 NewState: ENABLE或者DISABLE
 * 出口参数：None
 * 返回值  ：None
 * 编写日期：
 * 作者    ：
 *------------------------------------------------------*/
void TM_Cmd(TM_TypeDef* TMx, FunctionalState NewState)
{
	/* Check the parameters */
	assert_param(IS_TM_ALL_PERIPH(TMx));    
	assert_param(IS_FUNCTIONAL_STATE(NewState));
	
	if (NewState != DISABLE)
	{

		TMx->CR |= TM0_CR_T0EN;
		
	}
	else
	{

		TMx->CR &= ~TM0_CR_T0EN;
		
	}
} 
 
/*------------------------------------------------------
 * 函数功能：设置自动重载值
 * 入口参数：TMx: TM0,TM1,TM2
 *			 Value: 16位重载值
 * 出口参数：None
 * 返回值  ：None
 * 编写日期：
 * 作者    ：
 *------------------------------------------------------*/
void TM_SetAutoReload(TM_TypeDef* TMx,uint16_t Value)
{
	/* Check the parameters */
	assert_param(IS_TM_ALL_PERIPH(TMx));
    assert_param(IS_TM_Reload_Value(Value));	
	
	TMx->LOAD = Value;
}
 
/*------------------------------------------
 * 函数功能：读计数器瞬间值
 * 入口参数：TM0/1/2
 * 出口参数：TMx_CNT
 * 返回值  ：定时器当前值
 * 编写日期：
 * 作者    ：
 *------------------------------------------*/
uint16_t TM_GetCounter(TM_TypeDef* TMx)
{
	/* Check the parameters */
	assert_param(IS_TM_ALL_PERIPH(TMx));

	return (TMx->CNT);
} 
 
/*---------------------------------------------------------------------------------------
 * 函数功能：配置捕捉功能，包括捕捉信号输入通道，捕捉沿及捕捉个数的配置
 * 入口参数：CCP_Channel,TM_CCPTrigger,TM_CCPCounterx
 * 出口参数：None
 * 返回值  ：None
 * 编写日期：
 * 作者    ：
 *--------------------------------------------------------------------------------------*/
void TM_CCPConfig(uint16_t CCP_Channel,uint16_t TM_CCPTrigger,uint16_t TM_CCPCounterx)
{
	uint16_t tmpreg=0;
	/* Check the parameters */
	assert_param(IS_TM_CCPChanneL(CCP_Channel));	
	assert_param(IS_TM_CCP_Trigger(TM_CCPTrigger));	
	assert_param(IS_TM_CCPCounter(TM_CCPCounterx));

	tmpreg=TM1->CR & 0x0BFF;
	tmpreg|=CCP_Channel|TM_CCPTrigger|TM_CCPCounterx;
	TM1->CR =tmpreg;

}

/*----------------------------------------
 * 函数功能：捕捉功能使能
 * 入口参数：NewState: ENABLE或者DISABLE
 * 出口参数：None
 * 返回值  ：None
 * 编写日期：
 * 作者    ：
 *----------------------------------------*/
void TM_CCPCmd(FunctionalState NewState)					    
{
	/* Check the parameters */
	assert_param(IS_FUNCTIONAL_STATE(NewState));
	
	if (NewState != DISABLE)
	{

		TM1->CR |= TM1_CR_CCPEN;
	}
	else
	{
		
		TM1->CR &= ~TM1_CR_CCPEN;
		
	}	
}

/*----------------------------------
 * 函数功能：读捕捉寄存器数据
 * 入口参数：None
 * 出口参数：TM1->CCPD
 * 返回值  ：返回捕捉结果
 * 编写日期：
 * 作者    ：
 *----------------------------------*/
uint16_t TM_GetCCPData(void)
{
	return(TM1->CCPD);		
}

/*----------------------------------------------
 * 函数功能：PFD使能
 * 入口参数：NewState: ENABLE或者DISABLE
 * 出口参数：None
 * 返回值  ：None
 * 编写日期：
 * 作者    ：
 *----------------------------------------------*/
void TM_PFDCmd(FunctionalState NewState)
{
	/* Check the parameters */
	assert_param(IS_FUNCTIONAL_STATE(NewState));
	
	if (NewState != DISABLE)
	{
	
		TM2->CR |= TM2_CR_PFDEN;
	}
	else
	{
		
		TM2->CR &= ~TM2_CR_PFDEN;
		
	}	
}

/*------------------------------------------------------
 * 函数功能：使能定时器中断
 * 入口参数：TMx: TM0,TM1,TM2
 *			 NewState: ENABLE或者DISABLE
 * 出口参数：None
 * 返回值  ：None
 * 编写日期：
 * 作者    ：
 *------------------------------------------------------*/ 
void TM_ITCmd(TM_TypeDef* TMx,FunctionalState NewState)
{
	/* Check the parameters */
	assert_param(IS_TM_ALL_PERIPH(TMx));
	assert_param(IS_FUNCTIONAL_STATE(NewState));
	
	if (NewState != DISABLE)
	{

		TMx->CR|= TM0_CR_T0IE;			

	}
	else
	{
		TMx->CR&=~TM0_CR_T0IE;
	}		
}

/*---------------------------------------------
 * 函数功能：获取定时器中断标志位
 * 入口参数：TMx: TM0,TM1,TM2
 * 出口参数：None
 * 返回值  ：定时器中断标志位 bitstatus
 * 编写日期：
 * 作者    ：
 *---------------------------------------------*/ 
ITStatus TM_GetITStatus(TM_TypeDef* TMx)
{	
	/* Check the parameters */
	assert_param(IS_TM_ALL_PERIPH(TMx));
	
	ITStatus bitstatus = RESET;

	if ((TMx->SR & TM0_SR_T0IF) != RESET)
	{
		bitstatus = SET;
	}
	else
	{
		bitstatus = RESET;
	}
	return bitstatus;
}

/*----------------------------------------
 * 函数功能：清定时器中断标志位
 * 入口参数：TMx: TM0,TM1,TM2
 * 出口参数：None
 * 返回值  ：None
 * 编写日期：
 * 作者    ：
 *----------------------------------------*/ 
void TM_ClearITStatus(TM_TypeDef* TMx)
{
	TMx->SR |= TM0_SR_T0IF;	
}

/*-----------------------------------------
 * 函数功能：使能CCP捕捉中断
 * 入口参数：NewState: ENABLE或者DISABLE
 * 出口参数：None
 * 返回值  ：None
 * 编写日期：
 * 作者    ：
 *-----------------------------------------*/ 
void TM_CCPITCmd(FunctionalState NewState)
{
	/* Check the parameters */
	assert_param(IS_FUNCTIONAL_STATE(NewState));
	
	if (NewState != DISABLE)
	{

		TM1->CR|= TM1_CR_CCPIE;			

	}
	else
	{
		TM1->CR&=~TM1_CR_CCPIE;
	}
	
}

/*-----------------------------------------
 * 函数功能：获取CCP中断标志位
 * 入口参数：None
 * 出口参数：None
 * 返回值  ：CCP中断标志位 bitstatus
 * 编写日期：
 * 作者    ：
 *-----------------------------------------*/ 
ITStatus TM_GetCCPITStatus(void)
{
	ITStatus bitstatus = RESET;

	if ((TM1->SR & TM1_SR_CCPIF) != RESET)
	{
		bitstatus = SET;
	}
	else
	{
		bitstatus = RESET;
	}
	return bitstatus;
}
/*------------------------------------------
 * 函数功能：清CCP中断标志位
 * 入口参数：None
 * 出口参数：None
 * 返回值  ：None
 * 编写日期：
 * 作者    ：
 *------------------------------------------*/ 
void TM_ClearCCPITStatus(void)
{
    TM1->SR |= TM1_SR_CCPIF;
}


/****************************END OF FILE****************************/